package com.ftg.learn.chapter09.pattern.factory;

import com.ftg.learn.chapter09.reflech.demo03.pojo.Cat;
import com.ftg.learn.chapter09.reflech.demo03.pojo.Dog;

/**
 * @author kangjx
 * @date 2023/1/17
 */
public class PlayFactoryMain {

    @SuppressWarnings("all")
    public static void main(String[] args) {

        //语文
        AbstractCourse course = CourseFactory.getCourse("语言");
        //语文
        AbstractCourse course1 = CourseFactory.getCourse("数学");
        //语文
        AbstractCourse course2 = CourseFactory.getCourse("英语");

        course.teach();
        course1.teach();
        course2.teach();


        AbstractCourse course3 = CourseFactory.getCourse(CourseTypeEnum.english);
        AbstractCourse course4 = CourseFactory.getCourse(      CourseTypeEnum.chinese    );

        course3.teach();
        course4.teach();

        //可以传递不是子类
        AbstractCourse course5 = CourseFactory.getCourse(Chinese.class,"小学语言","张三","小学语文课");

        course5.teach();


        CouseFacctory01<Math> couseFacctory01 = new CouseFacctory01<>();
        Math c6 = couseFacctory01.getCourse(new Math(),"小学数学","李ssssss四","数学 ");
        c6.teach();

        Math c7 = couseFacctory01.getCourse(Math.class,"小学数学","李ssssss四","数学 ");
        c7.teach();

//        AbstractCourse course6 = CourseFactory.getCourse(Cat.class,"小学语言","张三","小学语文课");
//        course6.teach();

        // 把方法使用说明做细，问题不错处理 {不推荐}
        // 一定有方法解决这个问题
        // 一聊泛型
        // 泛型允许程序员在强类型程序设计语言中编写代码时使用一些以后才指定的类型，在实例化时作为参数指明这些类型
        // 在类声明的时候给一个形参   在实例化的时候给一个实参
        // 作用是什么呢？
//        Class c ;关联对象，关联对关联的谁你不知道，现在关联是dog Dog与AbstractCourse没有继承  实现关系所以不能向上转型 呀
    }

}
